﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques;
using BussinessLogicTecnoPez.Produccion.Clasificacion_e_Incubacion;

public partial class Modules_EnfermedadesControlEstanque_GenerarPlanControl : System.Web.UI.Page
{
    private int idEstanque
    {
        get { return Convert.ToInt32(ViewState["idestanque"]); }
        set { ViewState["idestanque"] = value; }

    }

    private PlanControl planGenerado
    {
        get { return ViewState["plan"] as PlanControl; }
        set { ViewState["plan"] = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        this.lblMessage.Text = "";
        this.idEstanque = Convert.ToInt32(Request["idestanque"]);
        if (IsPostBack == false)
        {
            Globals_GenericMasterPageNoSecurity master = (Globals_GenericMasterPageNoSecurity)this.Master;
            master.Imagen = "../Styles/Icons/schedule.png";
            master.Titulo = "Generar plan de control";

            this.planGenerado = null;
            tablaPlan.Visible = false;
            CargarDatos();
        }
        InicializarGrilla();
        
    }

    private void InicializarGrilla()
    {
        DataControlField[] extraButtons = new DataControlField[0];
        tdgPlanificacion.setupGrid(typeof(ItemDetallePlanControl), cargarPlan,true, false, this.ViewState,extraButtons);
        //tdgPlanificacion.PageSize = 30;
    }

    private void CargarDatos()
    {
        Estanque.getManager.ClearFilters();
        Estanque.getManager.ClearOrders();
        Estanque.getManager.AddFilter("idEstanque", BussinessLogicTecnoPez.GenericManager<Estanque>.filterOperator.Equals, this.idEstanque);
        Estanque dato= Estanque.getManager.GetOne();

        Empleado datoEmpleado = Tecnopez.Globals.Functions.getEmpleadoLogueado(this);

        this.txtEstanque.Text = dato.descripcion;
        this.txtEmpleado.Text = datoEmpleado.Apellido + ", " + datoEmpleado.Nombre;

    }

    protected void cmdGenerar_Click(object sender, EventArgs e)
    {
        DateTime fechaInicio;
        DateTime fechaFin;

        if (DateTime.TryParse(tpcFechaInicio.Text, out fechaInicio)==false)
        {
            this.lblMessage.Text = "Incorrecta fecha de inicio.";
            return;
        }

        if (DateTime.TryParse(tpcFechaFin.Text, out fechaFin) == false)
        {
            this.lblMessage.Text = "Incorrecta fecha de fin.";
            return;
        }

        if (fechaInicio >= fechaFin)
        {
            this.lblMessage.Text = "Fecha de inicio mayor a fecha de fin.";
            return;
        }

        if (fechaInicio <= DateTime.Now.AddDays(-1))
        {
            this.lblMessage.Text = "Fecha de inicio debe ser igual o mayor a la fecha actual.";
            return;
        }

        ParametroControl.getManager.ClearFilters();
        ParametroControl.getManager.ClearOrders();
        List<ParametroControl> lista= ParametroControl.getManager.GetAll();

        PlanControl plan = new PlanControl();
        plan.DetallePlanControl = new DetallePlanControl();
 
        foreach (ParametroControl item in lista)
        {
            DateTime fechaPlan= fechaInicio;

            while (fechaPlan < fechaFin)
            {
                plan.DetallePlanControl.add(null,null,null,item, fechaPlan);
                fechaPlan = fechaPlan.AddDays(item.Frecuencia);
            }
        }

        plan.FechaInicio = fechaInicio;
        plan.FechaFin = fechaFin;
        plan.Estanque = new Estanque();
        plan.Estanque.idEstanque = this.idEstanque;
        plan.Empleado = Tecnopez.Globals.Functions.getEmpleadoLogueado(this);

        this.planGenerado = plan;
        cargarPlan();
    }

    private void cargarPlan()
    {
        if (this.planGenerado != null)
        {
            if (this.planGenerado != null)
            {
                this.planGenerado.DetallePlanControl.ItemList.Sort();
            }
            tdgPlanificacion.DataSource = this.planGenerado.DetallePlanControl.ItemList;
            tdgPlanificacion.DataBind();
            tablaPlan.Visible = true;
        }
    }

    private bool GuardarPlan()
    {
        //using (System.Transactions.TransactionScope transaccion = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.RequiresNew, new TimeSpan(0, 30, 0)))
        //{
            if (PlanControl.getManager.Insert(planGenerado) == false)
            {
                return false;
            }   
            else
            {
                //transaccion.Complete();
            }
        //}
        return true;
    }
    protected void cmdGuardar_Click(object sender, EventArgs e)
    {
        if (GuardarPlan())
        {
            Response.Redirect("PlanesDeControl.aspx?idEstanque=" + this.idEstanque);
        }
        else
        {
            this.lblMessage.Text = "No se pudo guardar el plan";
        }
    }
}
